package com.heaven.core.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * 单视频实体类，存储的数据结构
 */
@Data
@Document("video")
public class VideoEntity implements Serializable {
    /** 唯一标识主键，不指定时按照mongoDB默认的主键方式 ；且mongoDb主键key为 _id**/
    @Id
    private String videoId;

    /** 视频所属用户id **/
    @Indexed(background = true)
    private String userId;

    /** 视频所属分类id: {一级Cid}-{二级Cid}-{三级Cid}
     * 二、三级Cid为 1、2、3
     * **/
    @Indexed(background = true)
    private String catId;

    /** 视频文件的md5值 **/
    private String md5;

    /** 视频标题 **/
    @Indexed(background = true) //将索引创建任务放到后台线程中执行，不影响主线程的正常操作
    private String title;

    /** 视频简介 **/
    private String introduce;

    /** 视频文件格式（mp4、mov ...） **/
    private String format;

    /** 视频链接(文件存储在minio中)，mongodb存储格式：{bucket}:{objectName} **/
    private String url;

    /** 视频封面(文件存储在minio中)，mongodb存储格式：{bucket}:{objectName} **/
    private String coverPicture;

    /** 视频文件大小，单位: B **/
    private Long size;

    /** 视频时长，单位：s **/
    private Long duration;

    /** 播放量 **/
    private BigDecimal playCount;

    /** 发布时间 **/
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date publishTime;

    /** 视频状态：0:新建, 1:确认提交 **/
    private int status;

    /** 视频是否存在在minio中; 0不存在，1存在 **/
    private int isInMinio;

    /** 点赞该视频的用户ID集合 **/
    private Set<String> beLikedUserIds;

    /** 收藏视频的用户ID集合 **/
    private Set<String> beCollectedUserIds;

    public VideoEntity() {
        this.playCount = new BigDecimal(0);
        this.beLikedUserIds = new HashSet<>();
        this.beCollectedUserIds = new HashSet<>();
    }
}
